package com.gzsxy.esjy.service.netty.common.lock;

import java.util.function.Consumer;
import java.util.function.Function;

/**
 * 同步锁
 * @author zhangxiaolong
 * @date 2022/7/11 9:36
 */
public interface DistributedLock {
	
	public final static String DEFAULT_DEVICE="default";

	/**
	 * 尝试获取锁
	 * @param key
	 * @param device 内存分区
	 * @param maxWaitTime  最大的等待时间
	 * @param timeInterval 间隔时间
	 * @return true  成功， false 失败
	 * @description: 创建锁
	 */
	boolean tryLock(String key,String device, long maxWaitTime, long timeInterval);

	/**
	 * 解除锁
	 * @param key
	 * @param device 内存分区
	 */
	void unLock(String key,String device);
	
	/**
	 * 执行锁 = 尝试获取锁 +业务操作+解除锁
	 * @param lock
	 * @param excute
	 * @return
	 */
	Object excute(Function<Lock,Object> excute,Lock lock) ;

	/**
	 * 执行锁 = 尝试获取锁 +业务操作+解除锁
	 * @param lock
	 * @param excute
	 * @return
	 */
	void excute(Lock lock,Consumer<Lock> excute) ;
}